package com.cpcs.hello;

import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.ChannelFuture;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.nio.NioServerSocketChannel;

/**
 * server 启动类
 */
public class HelloServer {

    public static void main(String[] args) {
        // 定义一对线程组
        // bossGroup:主线程组，用于接收客户端连接，本身并不处理任何请求
        EventLoopGroup bossGroup = new NioEventLoopGroup();
        // workerGroup:从线程组，处理主线程组接收过来的请求
        EventLoopGroup workerGroup = new NioEventLoopGroup();

        try {
            // 创建 server 的启动类
            ServerBootstrap server = new ServerBootstrap();
            server.group(bossGroup, workerGroup)            // 设置组从线程组
                    .channel(NioServerSocketChannel.class)  // 设置 nio 双向通道
                    .childHandler(new HelloServerInitializer());        // 注册子处理器，用户从线程组中的人物处理
            ChannelFuture future = server.bind(8088).sync();    // 将服务绑定到8088端口，并设置为同步启动
            future.channel().closeFuture().sync();                      // 监听 channel 的关闭，设置为同步方式

        } catch (InterruptedException e) {
            bossGroup.shutdownGracefully();
            workerGroup.shutdownGracefully();
        }
    }
}
